package au.com.acpfg.misc.spectra;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import org.proteomecommons.io.GenericPeak;
import org.proteomecommons.io.Peak;
import org.proteomecommons.io.PeakList;
import org.proteomecommons.io.mgf.MascotGenericFormatPeakList;
/**
*
* @author andrew.cassin
*
*/
public class MyMGFPeakList implements Serializable {
/**
*
*/
private static final long serialVersionUID = -4897834331580715693L;
private HashMap<String,String> m_headers; // all header eg. TITLE, CHARGE, PEPMASS etc with their values
private double[] m_mz;
private double[] m_intensity;
private double m_mz_min, m_mz_max;
private int m_tc;
public MyMGFPeakList() {
m_headers = new HashMap<String,String>();
m_mz = null;
m_intensity = null;
m_tc = 2; // assume MS/MS
}
public void setPeaks(double[] mz, double[] intensity) {
assert(mz.length == intensity.length);
m_mz = mz;
m_intensity = intensity;
m_mz_min = Double.POSITIVE_INFINITY;
m_mz_max = Double.NEGATIVE_INFINITY;
for (int i=0; i<mz.length; i++) {
if (mz[i] < m_mz_min)
m_mz_min = mz[i];
if (mz[i] > m_mz_max)
m_mz_max = mz[i];
}
}
public Peak[] getPeaks() {
int n_peaks = m_mz.length;
if (n_peaks < 1)
return null;
GenericPeak[] p = new GenericPeak[n_peaks];
for (int i=0; i<n_peaks; i++) {
p[i] = new GenericPeak();
p[i].setMassOverCharge(m_mz[i]);
p[i].setIntensity(m_intensity[i]);
}
return p;
}
public int getNumPeaks() {
if (m_mz == null)
return 0;
return m_mz.length;
}
public List<Peak> getPeaksAsList() {
Peak[] p = getPeaks();
ArrayList<Peak> ret = new ArrayList<Peak>();
for (Peak tmp : p) {
ret.add(tmp);
}
return ret;
}
@Override
protected Object clone() throws CloneNotSupportedException {
throw new CloneNotSupportedException("MyMGFPeakList does not support clone yet!");
}
@Override
public boolean equals(Object obj) {
return (this == obj);
}
@Override
public int hashCode() {
return m_headers.hashCode();
}
public void addHeader(String key, String val) {
m_headers.put(key, val);
}
public String getHeader(String key) {
if (hasHeader(key)) {
return m_headers.get(key);
}
return null;
}
public boolean hasHeader(String key) {
if (m_headers != null && m_headers.containsKey(key))
return true;
return false;
}
public void setCharge(String ch) {
addHeader("CHARGE", ch);
}
public void setTitle(String title) {
addHeader("TITLE", title);
}
public void setPepMass(String pm) {
addHeader("PEPMASS", pm);
}
public void setTandemCount(int tc) {
m_tc = tc;
}
public double getMinMZ() {
return m_mz_min;
}
public double getMaxMZ() {
return m_mz_max;
}
public String getTitle_safe() {
String title = getHeader("TITLE");
return (title != null) ? title : "";
}
public String getPepmass_safe() {
String pepmass = getHeader("PEPMASS");
return (pepmass != null) ? pepmass : "";
}
public String getCharge_safe() {
String charge = getHeader("CHARGE");
return (charge != null) ? charge : "";
}
public int getTandemCount() {
return m_tc;
}
}